#ifndef STYLED_TREE_VIEW_H
#define STYLED_TREE_VIEW_H

#include <QWidget>
#include <QTreeView>
#include <QStandardItemModel>
#include <QList>
#include <QMap>
#include <QString>
#include <QStringList>

class QVBoxLayout;

// 通用的带样式的树形视图组件
class StyledTreeView : public QWidget
{
    Q_OBJECT

public:
    explicit StyledTreeView(QWidget *parent = nullptr);

    // 设置表头标题 (列数由数据决定)
    void setHeaderLabels(const QStringList& labels);
    // 设置树形数据
    void setTreeData(const QList<QMap<QString, QString>>& data);

    // 获取选中节点的数据
    QMap<QString, QString> getSelectedNodeData() const;

signals:
    // 点击事件信号，传递选中节点的ID和整行数据
    void nodeClicked(const QString& nodeId, const QMap<QString, QString>& nodeData);

private slots:
    // 内部处理点击事件的槽函数
    void onTreeViewClicked(const QModelIndex& index);

private:
    QTreeView *treeView;
    QStandardItemModel *model;
    QVBoxLayout *mainLayout;
    QList<QMap<QString, QString>> treeData; // 保存原始数据用于查询

    void setupUI();
    void applyTreeStyling();
    void populateTree(const QList<QMap<QString, QString>>& data);
};

#endif // STYLED_TREE_VIEW_H
